\documentclass[10pt]{report}

\input{manual-style.tex}

\title{The Checker Framework Manual: \\ Custom pluggable types for Java}
\author{\url{https://checkerframework.org}}
\newcommand{\ReleaseVersion}{3.52.1}
\newcommand{\ReleaseDate}{2025-12-02}
\date{Version \ReleaseVersion\ (\ReleaseDate)}

\begin{document}

%%% TODO: This file no longer exists on buffalo; must find a new file to test.
%% Releases are made on buffalo, so this macro is really saying
%% "released version of the CF" as opposed to a development version.
\newif\ifonbuffalo
%HEVEA\makeatletter\@iffileexists{/scratch/secs-jenkins/java/jdk1.7.0/LICENSE}{\onbuffalotrue}{\onbuffalofalse}\makeatother
%BEGIN LATEX
\IfFileExists{/scratch/secs-jenkins/java/jdk1.7.0/LICENSE}{\onbuffalotrue}{\onbuffalofalse}
%END LATEX

\begin{center}
%HEVEA\imgsrc{CFLogo.png}
%BEGIN LATEX
  \includegraphics{../logo/Logo/CFLogo.pdf}
%END LATEX
\end{center}

% Permit text on title page by making \newpage a no-op while running \maketitle
{\let\newpage\relax \maketitle}


\noindent
\textbf{For the impatient:}
Section~\refwithpageparen{installation}
describes how to \textbf{install and use} pluggable type-checkers.

%HEVEA This manual is also available in \href{https://checkerframework.org/manual/checker-framework-manual.pdf}{PDF}.

%HEVEA \setcounter{tocdepth}{1}
% Not supported by Hevea, so don't bother: \dominitoc
\tableofcontents
\newpage

\input{introduction.tex}

%% Checkers
% If you add a new checker, also update the lists in introduction.tex and
% advanced-features.tex .

\input{nullness-checker.tex}
\input{map-key-checker.tex}
\input{optional-checker.tex}
\input{interning-checker.tex}
\input{called-methods-checker}
\input{resource-leak-checker}
\input{fenum-checker.tex}
\input{lock-checker.tex}
\input{index-checker.tex}
% TODO: Uncomment when the Non-Empty Checker is ready to be publicized.
% \input{non-empty-checker.tex}

% These are related to tainting:
\input{tainting-checker.tex}
\input{sql-quotes-checker.tex}

% These are focused on strings:
\input{regex-checker.tex}
\input{formatter-checker.tex}
\input{i18n-format-checker.tex}
\input{propkey-checker.tex}
\input{signature-checker.tex}
\input{guieffect-checker.tex}
\input{units-checker.tex}

% These are focused on ints:
\input{signedness-checker.tex}

% Checkers that tend to be used as components of other checkers rather
% than used for their own sake:
\input{purity-checker.tex}
\input{constant-value-checker.tex}
\input{returns-receiver-checker.tex}
\input{reflection-checker.tex}
\input{initialized-fields-checker.tex}
\input{aliasing-checker.tex}
\input{must-call-checker.tex}

% Special subtyping checker and external checkers:
\input{subtyping-checker.tex}
\input{external-checkers.tex}

%% Advanced material

\input{generics.tex}
\input{advanced-features.tex}
\input{warnings.tex}
\input{inference.tex}
\input{annotating-libraries.tex}
\input{creating-a-checker.tex}
\input{accumulation-checker.tex}
\input{external-tools.tex}
\input{faq.tex}
\input{troubleshooting.tex}

\htmlhr
\bibliographystyle{alpha}
\bibliography{bibstring-unabbrev,alias,concurrency,ernst,games,generals,invariants,security,types,crossrefs}

\end{document}

% LocalWords:  pt TODO JavaDocs Arg api HEVEA html ernst
